package com.awccis.common.utils;

import com.awccis.admin.model.sorder.ServiceOrderToMerchantBean;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;

/**
 * @author txp
 */
public class PdfUtils {

    /**
     * 生成文档
     * @param filename 文件名称
     * @param data 文件中的数据
     */
    public static void detailsToPdf(String filename,Map<String,Object> data,String tel,String wechatNO) {
//        int padding=2;
//        int spacing=2;
        String[] titles={"订单编号","订单详情","订单价格","抽成比例","平台费用","订单时间"};


        //默认页面为A4界面 如和需求相同则相关边距设置不需要再次改动 如果有页边距其他的特殊要求 则需要根据代码详细设置；
        Document pdfDoc = new Document(new Rectangle(595, 842), 60, 60, 43, 30);

        try {
            //设置文档字体
            BaseFont baseFontChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            BaseFont baseFontChinese2  = BaseFont.createFont(JsonUtil.getJsonConfigValue("ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font fontTable =  new  Font(baseFontChinese2 , 12 , Font.NORMAL);
            Font fontText =  new  Font(baseFontChinese2 , 14 , Font.NORMAL);
            Font fontTitle =  new  Font(baseFontChinese2 , 18 , Font.NORMAL);
            Font fontMargin =  new  Font(baseFontChinese , 10 , Font.NORMAL);

            //Font fontTitleEnglish=new Font(baseFont1,18,Font.NORMAL);
            //Paragraph.

            //创建pdf文件
            FileOutputStream outputStream = new FileOutputStream(filename);
            PdfWriter.getInstance(pdfDoc, outputStream);
            pdfDoc.open();

            //创建含有colNum个字段的表格
            List<Map> details=(List<Map>)data.get("details");
            int colNum=titles.length;
            PdfPTable table = new PdfPTable(colNum);
            //设置列宽
            //设置字段单元格的相对大小
            table.getDefaultCell().setFixedHeight(30);
            //设置表格占文档的大小比例
            table.setWidthPercentage(100);// 宽度100%填充
            //设置单元格文本居中
            table.getDefaultCell().setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            table.getDefaultCell().setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            //添加表头
            for(String s:titles){
                table.addCell(new Paragraph(s,fontTable));
            }
            table.setHeaderRows(1);//表头设置结束,表示第一行属于表头

            //添加表中数据
            double total=0.0;
            for(Map map:details){
                for(String s:titles){
                    //设置背景颜色
                    table.addCell(new Paragraph(map.get(s).toString(),fontTable));
                }
                total+=Double.valueOf(map.get("平台费用").toString());
            }
            //添加总计
            //total=new DecimalFormat("#.00").format(total);
            PdfPCell cell = new PdfPCell(new Paragraph("总计", fontTable));
            cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);

            cell.setColspan(4);//单元格所在列
            table.addCell(cell);

            table.addCell(new Paragraph(new DecimalFormat("#.00").format(total), fontTable));
            table.addCell(new Paragraph("", fontTable));


            //把元素添加到 document 中
            //添加页眉
            //Image png2 = Image.getInstance("页眉.png");
            Paragraph paragraph = new Paragraph();

            Chunk chunk = new Chunk("       " +
                    "   A  W   C   C   I   S" +
                    "                          " +    //tab空位符 同一行文字无法实现一边靠左一边靠右功能 只能靠占位符
                    "                          " +
                    "                          " +
                    "                          " +
                    "合  作   共   赢   ，   创   美   好   生   活   ！",fontMargin);
//            paragraph.add(png2);
            chunk.setUnderline(0.2f, -5f); //0.2f 线的粗细   //-5f 距离文字的高度
            paragraph.add(chunk);
            pdfDoc.add(paragraph);

            //图片logo
            //以下是设置图片的绝对位置 调动的时候 5个越度调整为好 否则太小看不见 距离太大超过页面就会消失
            Image image1 = Image.getInstance(JsonUtil.getJsonConfigValue("yemei"));
            //设置图片位置的x轴和y周
            image1.setAbsolutePosition(60f, 780f);
            //设置图片的宽度和高度
            image1.scaleAbsolute(20, 20);
            //将图片1添加到pdf文件中
            pdfDoc.add(image1);
            //居中对齐
//            png2.setAlignment(Element.ALIGN_CENTER);
//            //长宽
//            png2.scaleAbsolute(595, 85);
//            pdfDoc.add(png2);
            //添加 title
            Paragraph titleP = new Paragraph(data.get("title").toString(),fontTitle);
            //titleP.setFont(fontTitleEnglish);
            //设置居中
            titleP.setAlignment(Element.ALIGN_CENTER);
            //设置段落后间距
            titleP.setSpacingBefore(28);
            titleP.setSpacingAfter(15);
            pdfDoc.add(titleP);

            //添加message
            Paragraph msgP = new Paragraph(data.get("msg").toString(), fontText);
            //设置首行缩进
            msgP.setFirstLineIndent(26);
            //设置段落后间距
            msgP.setSpacingAfter(25);
            //增加行距
            msgP.setLeading(22f);
            pdfDoc.add(msgP);

            //添加 details
            pdfDoc.add(table);

            //添加说明文字
            Paragraph text2= new Paragraph("请扫描下面二维码向平台支付费用:",fontText);
            //左对齐
            text2.setAlignment(Image.ALIGN_LEFT);
            //设置段落前后间距
            text2.setSpacingAfter(10);
            text2.setSpacingBefore(10);
            //设置首行缩进
            text2.setFirstLineIndent(44);
            pdfDoc.add(text2);
            //添加二维码
            Image png = Image.getInstance(JsonUtil.getJsonConfigValue("erweima"));
            //居中对齐
            png.setAlignment(Image.ALIGN_MIDDLE);
            //设置图片的宽度和高度
            png.scaleAbsolute(140, 180);
            pdfDoc.add(png);

            //添加联系方式
            Paragraph contactP = new Paragraph("对以上账单有疑问，请联系客服，电话："+tel+"，微信号："+wechatNO,fontText);
            contactP.setLeading(22f);
            //左对齐
            contactP.setAlignment(Image.ALIGN_LEFT);
            //设置首行缩进
            contactP.setFirstLineIndent(44);
            pdfDoc.add(contactP);

            Paragraph companyP =new Paragraph("加拿大西海岸华人联合会（AWCCIS）",fontText);
            //右对齐
            companyP.setAlignment(Image.ALIGN_RIGHT);
            //设置段落前间距
            companyP.setSpacingBefore(50);
            pdfDoc.add(companyP);

            //设置当前日期
            String dateStr=new SimpleDateFormat("yyyy年MM月dd日").format(new Date());
            Paragraph text5 =new Paragraph(dateStr,fontText);
            //右对齐
            text5.setAlignment(Image.ALIGN_RIGHT);
            pdfDoc.add(text5);

            //关闭文档
            pdfDoc.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

        }
    }

    /**
     * 初始化PDF文件中的数据
     * @param title 标题
     * @param msg 正文信息
     * @param list 表格数据
     * @return data (Map)
     */
    public static Map initData(String title, String msg, List<ServiceOrderToMerchantBean> list){
        Map data=new HashMap();
        data.put("title",title);
        data.put("msg",msg);
        DecimalFormat df = new DecimalFormat("#.00");
        List<Map<String,String>> details=new ArrayList<>();

        Map map;
        for (ServiceOrderToMerchantBean s : list) {
            map=new HashMap();
            map.put("订单编号",s.getServiceOrderId());
            map.put("订单详情",s.getServiceOrderInfo());
            map.put("订单价格",s.getServiceOrderMoney());
            map.put("抽成比例",s.getServiceOrderRatio()*100+"%");
            map.put("平台费用",Double.parseDouble(df.format(s.getServiceOrderMoney() * s.getServiceOrderRatio())));
            map.put("订单时间",new SimpleDateFormat("yyyy-MM-dd").format(s.getServiceOrderStartTime()));
            details.add(map);
        }

        data.put("details",details);
        return data;
    }

}
